package com.lr.design.pattern.structural.proxy.dynamicproxy;

import com.lr.design.pattern.structural.proxy.IOrderService;
import com.lr.design.pattern.structural.proxy.Order;
import com.lr.design.pattern.structural.proxy.OrderServiceImpl;

/**
 * Created by geely
 * <p>
 * 意图：为其他对象提供一种代理以控制对这个对象的访问。
 * <p>
 * 何时使用：想在访问一个类时做一些控制。
 * <p>
 * 优点： 1、职责清晰。 2、高扩展性。 3、智能化。
 * <p>
 * 缺点：
 * 1、由于在客户端和真实主题之间增加了代理对象，因此有些类型的代理模式可能会造成请求的处理速度变慢。
 * 2、实现代理模式需要额外的工作，有些代理模式的实现非常复杂。
 * <p>
 * TODO 注意事项：
 * TODO 1、和适配器模式的区别：适配器模式主要改变所考虑对象的接口，而代理模式不能改变所代理类的接口。
 * TODO 2、和装饰器模式的区别：装饰器模式为了增强功能，而代理模式是为了加以控制。
 */
public class Test {
    public static void main(String[] args) {
        Order order = new Order();
//        order.setUserId(2);
        order.setUserId(1);
        IOrderService orderServiceDynamicProxy = (IOrderService) new OrderServiceDynamicProxy(new OrderServiceImpl()).bind();

        orderServiceDynamicProxy.saveOrder(order);
    }
}
